{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "cef5c88ef2238b4e",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "学习目标\n",
    "- 理解数组的各种生成方法\n",
    "- 应用数组的索引机制实现数组的切片获取\n",
    "- 应用维度变换实现数组的形状改变\n",
    "- 应用类型变换实现数组类型改变\n",
    "- 应用数组的转换"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a9a59e27281de4bf",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "# 1 生成数组的方法\n",
    "## 1.1 生成0和1的数组\n",
    "- np.ones(shape, dtype)\n",
    "- np.ones_like(a, dtype)\n",
    "- np.zeros(shape, dtype)\n",
    "- np.zeros_like(a, dtype)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "id": "5bf5e16400635f0d",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:08.908618600Z",
     "start_time": "2024-02-20T10:39:08.580764500Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1., 1., 1., 1., 1., 1., 1., 1.],\n",
       "       [1., 1., 1., 1., 1., 1., 1., 1.],\n",
       "       [1., 1., 1., 1., 1., 1., 1., 1.],\n",
       "       [1., 1., 1., 1., 1., 1., 1., 1.]])"
      ]
     },
     "execution_count": 151,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "ones = np.ones([4,8])\n",
    "ones"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "id": "99edb7dcbc902e44",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:08.928661900Z",
     "start_time": "2024-02-20T10:39:08.911617800Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1., 1., 1., 1., 1., 1., 1., 1.],\n",
       "       [1., 1., 1., 1., 1., 1., 1., 1.],\n",
       "       [1., 1., 1., 1., 1., 1., 1., 1.],\n",
       "       [1., 1., 1., 1., 1., 1., 1., 1.]])"
      ]
     },
     "execution_count": 152,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ones_like = np.ones_like(ones)\n",
    "ones_like"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7477f8ec1f877e2c",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 1.2 从现有数组生成\n",
    "### 1.2.1 生成方式\n",
    "- np.array(object, dtype)\n",
    "- np.asarray(a, dtype)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "id": "7b98197d7f3a782b",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:08.975519800Z",
     "start_time": "2024-02-20T10:39:08.929718300Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "a = np.array([[1,2,3],[4,5,6]])\n",
    "# 从现有的数组当中创建\n",
    "a1 = np.array(a)\n",
    "# 相当于索引的形式，并没有真正的创建一个新的\n",
    "a2 = np.asarray(a)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ee5b2ce1e9f9b46c",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "### 1.2.2 array和asarray的对比"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "id": "ca639abe435ece7c",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:08.987464500Z",
     "start_time": "2024-02-20T10:39:08.950975900Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "a = np.array([[1, 2, 3], [4, 5, 6]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "id": "ac308a9698ec7036",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:09.008491600Z",
     "start_time": "2024-02-20T10:39:08.981487600Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3],\n",
       "       [4, 5, 6]])"
      ]
     },
     "execution_count": 155,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "id": "6b86b60d809ba4a7",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:09.026112700Z",
     "start_time": "2024-02-20T10:39:09.012106400Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "a1 = np.array(a) # 深拷贝"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "id": "203c1c7872fe9c5c",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:09.065917600Z",
     "start_time": "2024-02-20T10:39:09.026112700Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3],\n",
       "       [4, 5, 6]])"
      ]
     },
     "execution_count": 157,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "id": "12efd52a9b54ff9a",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:09.068918Z",
     "start_time": "2024-02-20T10:39:09.032952800Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "a2 = np.asarray(a) # 浅拷贝"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "id": "edc80bd33ef58af8",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:09.104022300Z",
     "start_time": "2024-02-20T10:39:09.071919800Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3],\n",
       "       [4, 5, 6]])"
      ]
     },
     "execution_count": 159,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "id": "71073d3114620c7",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:09.125020900Z",
     "start_time": "2024-02-20T10:39:09.099511300Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "a[0, 0] = 1000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "id": "a7f2432f9ab75806",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:09.140234100Z",
     "start_time": "2024-02-20T10:39:09.126020900Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1000,    2,    3],\n",
       "       [   4,    5,    6]])"
      ]
     },
     "execution_count": 161,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "id": "1a22fd53194811b0",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:09.192586200Z",
     "start_time": "2024-02-20T10:39:09.141235Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3],\n",
       "       [4, 5, 6]])"
      ]
     },
     "execution_count": 162,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a1"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "df5e5e27a8e253b8",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 1.3 生成固定范围的数组\n",
    "### 1.3.1 np.linspace()\n",
    "np.linspace (start, stop, num, endpoint)\n",
    "- 创建等差数组 — 指定数量\n",
    "- 参数:\n",
    "    - start:序列的起始值\n",
    "    - stop:序列的终止值\n",
    "    - num:要生成的等间隔样例数量，默认为50\n",
    "    - endpoint:序列中是否包含stop值，默认为ture"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 163,
   "id": "674be4c3ea3b2202",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:09.194587Z",
     "start_time": "2024-02-20T10:39:09.145199900Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  0.,  10.,  20.,  30.,  40.,  50.,  60.,  70.,  80.,  90., 100.])"
      ]
     },
     "execution_count": 163,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 生成等间隔的数组\n",
    "np.linspace(0, 100, 11)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aee5db1b52939031",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "### 1.3.2 np.arange()\n",
    "np.arange(start,stop, step, dtype)\n",
    "- 创建等差数组 — 指定步长\n",
    "- 参数\n",
    "    - step:步长,默认值为1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "id": "d4941a257deccde5",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:09.217321100Z",
     "start_time": "2024-02-20T10:39:09.172075200Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42,\n",
       "       44, 46, 48])"
      ]
     },
     "execution_count": 164,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.arange(10, 50, 2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3580279a20365cc8",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "### 1.3.3 np.logspace()\n",
    "np.logspace(start,stop, num)\n",
    "- 创建等比数列\n",
    "- 参数:\n",
    "    - start：对数起始值。\n",
    "    - stop：对数结束值。\n",
    "    - num：在起始值和结束值之间生成的样本数，默认为 50。\n",
    "    - endpoint：如果为 True，则结束值包含在生成的数列中，默认为 True。\n",
    "    - base：对数的底数，默认为 10.0。\n",
    "    - dtype：生成数列的数据类型，默认为 None，即使用默认数据类型。\n",
    "    - axis：如果输入值是数组，则沿指定的轴生成数列，默认为 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "id": "22ea867eb674bd53",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:09.303243600Z",
     "start_time": "2024-02-20T10:39:09.201593900Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.e+00, 1.e+01, 1.e+02, 1.e+03, 1.e+04, 1.e+05, 1.e+06, 1.e+07,\n",
       "       1.e+08, 1.e+09, 1.e+10])"
      ]
     },
     "execution_count": 165,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 生成10^x \n",
    "np.logspace(0, 10, 11) # 10^0~10^10 生成11个数"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6094f419956ddde6",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 1.4 生成随机数组\n",
    "### 1.4.1 使用模块介绍\n",
    "- np.random模块\n",
    "### 1.4.2 正态分布\n",
    "#### 一、基础概念复习：正态分布（理解）\n",
    "a. 什么是正态分布\n",
    "正态分布是一种概率分布。正态分布是具有两个参数μ和σ的连续型随机变量的分布，第一参数μ是服从正态分布的随机变量的均值，第二个参数σ是此随机变量的标准差，所以正态分布记作N(μ，σ )。\n",
    "b. 正态分布的应用\n",
    "生活、生产与科学实验中很多随机变量的概率分布都可以近似地用正态分布来描述。\n",
    "c. 正态分布特点\n",
    "μ决定了其位置，其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。\n",
    "标准差如何来？\n",
    "- 方差是在概率论和统计方差衡量一组数据时离散程度的度量,一般用σ ^2来表示：\n",
    "- 标准差与方差的意义\n",
    "    可以理解成数据的一个离散程度的衡量\n",
    "\n",
    "#### 二、正态分布创建方式\n",
    "```python\n",
    "np.random.randn(*d0, d1, …, dn*)\n",
    "  # 功能：从标准正态分布中返回一个或多个样本值\n",
    "```\n",
    "```python\n",
    "np.random.normal(*loc=0.0*, *scale=1.0*, *size=None*)\n",
    "  # 功能：返回指定形态的正态分布\n",
    "  # 参数\n",
    "    # loc：float - 此概率分布的均值（对应着整个分布的中心centre）\n",
    "    # scale：float - 此概率分布的标准差（对应于分布的宽度，scale越大越矮胖，scale越小，越瘦高） \n",
    "    # size：int or tuple of ints - 输出的shape，默认为None，只输出一个值\n",
    "```\n",
    "```python\n",
    "np.random.standard_normal(*size=None*)\n",
    "  # 功能：返回指定形状的标准正态分布的数组。\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "id": "c22412244dd29484",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:10.925473100Z",
     "start_time": "2024-02-20T10:39:09.287934800Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.67005202, 2.32129096, 1.24321975, ..., 1.97673501, 1.47468667,\n",
       "       0.90204106])"
      ]
     },
     "execution_count": 166,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 举例1：生成均值为1.75，标准差为1的正态分布数据，100000000个\n",
    "x1 = np.random.normal(1.75, 1, 100000000)\n",
    "x1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "id": "ebcc306e1af80fc7",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:13.799418200Z",
     "start_time": "2024-02-20T10:39:10.925473100Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABmAAAAMtCAYAAACIA75UAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAABBhklEQVR4nO3df3TV9X348VcgJqCSWH8QxiEaVneq1B9UQEjdenSlpl3sGSu2urmWqtXZRVbMVr10FjtnK9V2oqLQzp3iWcvxR3fU6p04Dk5cK62KZVNX6HqqRyYL4FoSZTUoyfcPv1wJIuTHO/ncH4/HOZyWe9+El9GQy+d53+9PVW9vb28AAAAAAACQzKisBwAAAAAAACg3AgwAAAAAAEBiAgwAAAAAAEBiAgwAAAAAAEBiAgwAAAAAAEBiAgwAAAAAAEBiAgwAAAAAAEBi1VkPUMx6enpiy5YtMW7cuKiqqsp6HAAAAAAAIEO9vb3x6quvxsSJE2PUqAPvcRFgDmDLli3R2NiY9RgAAAAAAEAR2bx5c0yaNOmAawSYAxg3blxEvPWJrKury3gaAAAAAAAgS11dXdHY2FjoBwciwBzAnmPH6urqBBgAAAAAACAiol+3LTnwAWUAAAAAAAAMmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAAAAAACQmAADAACUvKZc/h0/3/cxAACAkSTAAAAAJWPvsLJvZBFdAACAYiLAAAAAJWff8JJqLQAAQCoCDAAAUBL6G08EFwAAoBhUZz0AAADAwQw1pAgxAADASBNgAACAojLcsWTPx39xceuw/j4AAEBlcwQZAABQNEZyp0pTLm9nDAAAMGwEGAAAoKIJMQAAwHAQYAAAgEyJHwAAQDkSYAAAgBG3766TYtiFkvXvDwAAlBcBBgAAAAAAILHqrAcAAAAqV7HtOtnfPC8ubs1gEgAAoNTZAQMAAHAAxRaJAACA0iDAAAAAI6IY7vMCAAAwUgQYAABgRIkwAABAJRBgAACAYVfq0aXU5wcAAEaeAAMAAAyrcosX5fbPAwAADA8BBgAAAAAAIDEBBgAAAAAAILHqrAcAAADKU7kd1VVu/zwAAMDwsgMGAAAAAAAgMQEGAABIrtx3izTl8mX/zwgAAAyNAAMAADBIIgwAAPBuBBgAAAAAAIDEqrMeAAAAKA+VuhukKZePFxe3Zj0GAABQZOyAAQAAAAAASEyAAQAAGKKmXL5idwABAAD7J8AAAABDJj4AAAD0JcAAAACDZudHXz4XAADAHgIMAAAAAABAYgIMAAAAAABAYgIMAAAwKI7b2j/HsgEAABECDAAAAAAAQHICDAAAwDCwCwYAACqbAAMAAAyII7b6z+cJAAAqlwADAAAAAACQmAADAAD0mx0dAAAA/SPAAAAAAAAAJCbAAAAADCP3zAEAgMokwAAAAAAAACQmwAAAAP1iFwcAAED/VWc9AAAAUNyEFwAAgIETYAAAAEbA3iHrxcWtGU4CAACMBEeQAQAAAAAAJCbAAAAA78rxY8PD5xUAAMqfAAMAAAAAAJCYe8AAAADvYIcGAADA0NgBAwAAAAAAkJgAAwAAAAAAkJgAAwAAkAHHvAEAQHkTYAAAgD6EgZHTlMv7fAMAQJkSYAAAAAAAABKrznoAAACgONiJAQAAkI4dMAAAAAAAAIkJMAAAAAAAAIkJMAAAgOPHMubzDwAA5UeAAQAAAAAASEyAAQAAKAJNubydMAAAUEYEGAAAqHAu+gMAAKQnwAAAAAAAACQmwAAAQIVy5FVx8u8EAADKgwADAAAAAACQmAADAAAAAACQmAADAABQZBwPBwAApU+AAQAAAAAASEyAAQCACmR3BQAAwPASYAAAAAAAABITYAAAAAAAABITYAAAoIK4uXtp8e8KAABKlwADAAAAAACQmAADAAAAAACQmAADAAAVwnFWAAAAI0eAAQAAKHLu3QMAAKVHgAEAAChiwgsAAJQmAQYAAAAAACAxAQYAAAAAACAxAQYAACqAY6wAAABGlgADAABQIoQ0AAAoHdVZDwAAAAwfF+wBAACyYQcMAABACWnK5YU1AAAoAQIMAAAAAABAYgIMAACUKbskAAAAsiPAAAAAAAAAJCbAAAAAAAAAJCbAAAAAlCBHzAEAQHETYAAAAAAAABIbUoBZvHhxVFVVxYIFCwqPvf7669HW1hZHHXVUHH744TF37tzYunVrn1/30ksvRWtraxx66KExfvz4+OIXvxhvvvlmnzWPPfZYnHbaaVFbWxvHH398rFix4h2//2233RZNTU0xZsyYmDlzZjz55JN9nu/PLAAAAAAAAKkNOsA89dRT8a1vfStOOeWUPo9fccUV8eCDD8a9994ba9eujS1btsQnPvGJwvO7d++O1tbW2LVrVzzxxBNx5513xooVK2LRokWFNS+88EK0trbGWWedFRs2bIgFCxbE5z73uXjkkUcKa+6+++5ob2+Pa665Jp555pk49dRTo6WlJbZt29bvWQAAoBw15fKOpwIAAMhYVW9vb+9Af9Frr70Wp512Wtx+++1x3XXXxdSpU2PJkiXR2dkZxxxzTKxcuTLOPffciIjYuHFjnHjiibFu3bqYNWtWPPzww3HOOefEli1boqGhISIili9fHldddVVs3749ampq4qqrrop8Ph/PPfdc4fc8//zzY8eOHbFq1aqIiJg5c2bMmDEjli5dGhERPT090djYGPPnz49cLtevWfbV3d0d3d3dhZ93dXVFY2NjdHZ2Rl1d3UA/TQAAkAnxpbK8uLg16xEAAKBidHV1RX19fb+6waB2wLS1tUVra2vMnj27z+Pr16+PN954o8/jJ5xwQhx77LGxbt26iIhYt25dnHzyyYX4EhHR0tISXV1d8fzzzxfW7PuxW1paCh9j165dsX79+j5rRo0aFbNnzy6s6c8s+7r++uujvr6+8KOxsXHAnxsAAAAAAIABB5i77rornnnmmbj++uvf8VxHR0fU1NTEEUcc0efxhoaG6OjoKKzZO77seX7Pcwda09XVFb/5zW/ilVdeid27d+93zd4f42Cz7GvhwoXR2dlZ+LF58+YDfCYAAKD42P0CAABQHKoHsnjz5s3xhS98IVavXh1jxowZrpkyU1tbG7W1tVmPAQAAgyK+VKY9/94dRQYAAMVlQDtg1q9fH9u2bYvTTjstqquro7q6OtauXRu33HJLVFdXR0NDQ+zatSt27NjR59dt3bo1JkyYEBEREyZMiK1b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",
      "text/plain": [
       "<Figure size 2000x1000 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "# 生成正态分布的随机数\n",
    "x1 = np.random.normal(1.75, 1, 100000000)\n",
    "\n",
    "# 画图看分布状况\n",
    "# 1）创建画布\n",
    "plt.figure(figsize=(20, 10), dpi=100)\n",
    "\n",
    "# 2）绘制直方图\n",
    "plt.hist(x1, 1000)\n",
    "\n",
    "# 3）显示图像\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fc592279d9da816",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "举例2：随机生成4支股票1周的交易日涨幅数据\n",
    "4支股票，一周(5天)的涨跌幅数据，如何获取？\n",
    "- 随机生成涨跌幅在某个正态分布内，比如均值0，方差1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "id": "a057e759f6a46a0c",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:13.805102900Z",
     "start_time": "2024-02-20T10:39:13.799418200Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.19400057, -0.51777385,  0.49419772,  0.77540376, -0.5110981 ],\n",
       "       [-1.15176941, -0.78406835,  0.2510081 , -0.92887099, -1.23303945],\n",
       "       [-0.88884262, -0.98714601,  0.87711623, -1.26290355,  0.61686271],\n",
       "       [-0.5849906 ,  1.1145051 , -0.95432897, -2.16089977,  1.42993962]])"
      ]
     },
     "execution_count": 168,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 创建符合正态分布的4只股票5天的涨跌幅数据\n",
    "stock_change = np.random.normal(0, 1, (4, 5))\n",
    "stock_change"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "20d8a6921f817f68",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "### 1.4.3 均匀分布\n",
    "#### 一、基础概念复习：均匀分布（理解）\n",
    "均匀分布是关于定义在区间[a,b], (a<b)上连续变量的简单概率分布\n",
    "#### 二、均匀分布创建方式\n",
    "```python\n",
    "np.random.rand(*d0*, *d1*, *...*, *dn*)\n",
    "# 功能：返回**[0.0，1.0)**内的一组均匀分布的数。\n",
    "\n",
    "```\n",
    "```python\n",
    "np.random.uniform(*low=0.0*, *high=1.0*, *size=None*)\n",
    "\n",
    "# - 功能：从一个均匀分布[low,high)中随机采样，注意定义域是左闭右开，即包含low，不包含high.  \n",
    "# - 参数介绍:\n",
    "       # - low: 采样下界，float类型，默认值为0；\n",
    "       # - high: 采样上界，float类型，默认值为1；\n",
    "       # - size: 输出样本数目，为int或元组(tuple)类型，\n",
    "          # 例如，size=(m,n,k), 则输出m*n*k个样本，缺省时输出1个值。  \n",
    "# - 返回值：ndarray类型，其形状和参数size中描述一致。\n",
    "```\n",
    "```python\n",
    "np.random.randint(*low*, *high=None*, *size=None*, *dtype='l'*)\n",
    "\n",
    "# 功能： 从一个均匀分布中随机采样，生成一个整数或N维整数数组，\n",
    "    # 取数范围：若high不为None时，取[low,high)之间随机整数，否则取值[0,low)之间随机整数。\n",
    "```\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "id": "bf74fd9b9c290500",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:14.380929300Z",
     "start_time": "2024-02-20T10:39:13.806164Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.50888986, -0.58572691, -0.28530053, ..., -0.60439918,\n",
       "       -0.66331685,  0.09323974])"
      ]
     },
     "execution_count": 169,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 生成均匀分布的随机数\n",
    "x2 = np.random.uniform(-1, 1, 100000000)\n",
    "x2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a05b4fe64b57ac64",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "id": "b6a8f8267d8d32f1",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:14.464176100Z",
     "start_time": "2024-02-20T10:39:14.380929300Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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AAApiB8AACAF8QMAAKQgfgAAgBTEDwAAkIL4AQAAUhA/AABACuIHAABIQfwAAAApiB8AACAF8QMAAKQgfgAAgBTEDwAAkIL4AQAAUhA/AABACuIHAABIQfwAAAApiB8AACAF8QMAAKQgfgAAgBTEDwAAkIL4AQAAUhA/AABACuIHAABIQfwAAAApiB8AACAF8QMAAKQgfgAAgBTEDwAAkIL4AQAAUhA/AABACuIHAABIQfwAAAApiB8AACAF8QMAAKQgfgAAgBTEDwAAkIL4AQAAUhA/AABACuIHAABIQfwAAAApiB8AACAF8QMAAKQgfgAAgBTEDwAAkIL4AQAAUhA/AABACuIHAABIQfwAAAApiB8AACAF8QMAAKQgfgAAgBTEDwAAkIL4AQAAUhA/AABACuIHAABIQfwAAAApiB8AACAF8QMAAKQgfgAAgBTEDwAAkIL4AQAAUhA/AABACuIHAABIQfwAAAApiB8AACAF8QMAAKQgfgAAgBTEDwAAkIL4AQAAUhA/AABACuIHAABIQfwAAAApiB8AACAF8QMAAKQgfgAAgBTEDwAAkIL4AQAAUhA/AABACuIHAABIQfwAAAApiB8AACAF8QMAAKQgfgAAgBTEDwAAkIL4AQAAUhA/AABACuIHAABIQfwAAAApiB8AACAF8QMAAKQgfgAAgBTEDwAAkIL4AQAAUhA/AABACuIHAABIQfwAAAApiB8AACAF8QMAAKQgfgAAgBTEDwAAkIL4AQAAUhA/AABACuIHAABIQfwAAAApiB8AACAF8QMAAKQgfgAAgBTEDwAAkIL4AQAAUhA/AABACuIHAABIQfwAAAApiB8AACAF8QMAAKQgfgAAgBTEDwAAkIL4AQAAUhA/AABACj0eP/PmzYu6uro477zzKtuee+65mD59euy3336xzz77xOTJk6O9vb2npwIAACTWo/Hzs5/9LL785S/HEUccUbX9k5/8ZHznO9+Jm2++Oe6555546qmn4owzzujJqQAAAMn1WPxs2LAhzjzzzLjuuuti3333rWzv6OiIhQsXxpVXXhlvf/vb49hjj41FixbFT3/607jvvvu2e6yurq7o7OysugEAAHRHj8XP9OnTY+LEidHa2lq1fcWKFfHCCy9UbR87dmwccMABsWzZsu0ea+7cudHY2Fi5jRo1qqemDQAA7KF6JH4WL14c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JN7+9rfHXnvtFd///vfjox/9aGzYsCE+/vGP12z+u4OdXeP3ve99ceCBB8bIkSPjl7/8ZXz605+Oxx57LL71rW9Vjru9c3zrvixqcQ7/6U9/iksvvTSmTZtWtT3bOfynP/0pNm/evN3z6te//vV27/NS5+HfP9du3fZSY7LYmfV9sU9/+tMxcuTIqhcyp556apxxxhkxevTo+O1vfxv/8R//EaeddlosW7Ys+vbtW9PHsKvbmTU+9NBD4/rrr48jjjgiOjo64oorrogTTjghHn744Xjd617nHP47r/Ycvv/+++NXv/pVLFy4sGq7c3jnvdRzcGdnZ/zlL3+JP//5z6/6eacnpIyfmTNnxmWXXfayYx599NEYO3bsazSjPcuOru+r9Ze//CVuuummmD179jb7/n7b0UcfHRs3bozPf/7ze8wLx55e479/IT5u3LgYMWJEnHzyyfHb3/42DjnkkJ0+7u7itTqHOzs7Y+LEifGGN7wh/uu//qtq355+DrN7mTdvXixevDjuvvvuqg/kT5kypfLf48aNiyOOOCIOOeSQuPvuu+Pkk0/ujanuVlpaWqKlpaXy9QknnBCHHXZYfPnLX45LL720F2e251m4cGGMGzcujj/++KrtzuF8UsbPpz71qTjrrLNedszBBx+8U8dubm6OiIj29vYYMWJEZXt7e3scddRRlTFPP/101f02bdoUa9eurdx/d7aj6/tq1+Gb3/xmPPvss/Gv//qvrzh2/Pjxcemll0ZXV1fU19e/4vhd3Wu1xluNHz8+IiJWrVoVhxxySDQ3N29ztZb29vaICOfwDq7v+vXr49RTT43BgwfHLbfcEv3793/Z8XvaOfxiw4YNi759+1bOo63a29tfci2bm5tfdvyOPB9nsTPru9UVV1wR8+bNix/84AdxxBFHvOzYgw8+OIYNGxarVq1K98Lx1azxVv3794+jjz46Vq1aFRHO4b/3atZ348aNsXjx4rjkkkte8c/JfA5310s9Bzc0NMSgQYOib9++r/rfRE9I+Zmf/fffP8aOHfuytwEDBuzUsUePHh3Nzc2xdOnSyrbOzs5Yvnx55f/utLS0xLp162LFihWVMT/84Q9jy5YtlReZu7MdXd9Xuw4LFy6Md73rXbH//vu/4tgHH3ww9t133z3mReNrtcZbPfjggxERlW++LS0t8dBDD1W98L/rrruioaEh3vCGN9TmQfainl7fzs7OOOWUU2LAgAFx2223bXNp2+3Z087hFxswYEAce+yxVc+dW7ZsiaVLl1b9n/G/19LSUjU+4q/n4dbxO/J8nMXOrG9ExOWXXx6XXnppLFmypOqzbS/lD3/4QzzzzDNVL9Sz2Nk1/nubN2+Ohx56qLJ+zuG/eTXre/PNN0dXV1e8//3vf8U/J/M53F2v9Bxci38TPaLXLrWwm/j9739fVq5cWbmc8sqVK8vKlSurLqt86KGHlm9961uVr+fNm1eGDBlSvv3tb5df/vKXZdKkSdu91PXRRx9dli9fXn784x+XMWPGpL3U9cutwx/+8Idy6KGHluXLl1fd7/HHHy91dXXlzjvv3OaYt912W7nuuuvKQw89VB5//PHypS99qey1115lzpw5Pf54dkXdXeNVq1aVSy65pPz85z8vq1evLt/+9rfLwQcfXN761rdW7rP1UtennHJKefDBB8uSJUvK/vvvn/ZS191Z346OjjJ+/Pgybty4smrVqqrLq27atKmUkvccXrx4camvry833HBDeeSRR8q0adPKkCFDKlcV/MAHPlBmzpxZGf+Tn/yk9OvXr1xxxRXl0UcfLRdddNF2L3X9Ss/HWXR3fefNm1cGDBhQvvnNb1adp1u//61fv778+7//e1m2bFlZvXp1+cEPflCOOeaYMmbMmPLcc8/1ymPsbd1d44svvrh873vfK7/97W/LihUrypQpU8rAgQPLww8/XBnjHP6b7q7vVieeeGJ5z3ves81253C19evXV17nRkS58sory8qVK8vvf//7UkopM2fOLB/4wAcq47de6vr8888vjz76aJk/f/52L3X9cn9nvUH8vIKpU6eWiNjm9qMf/agyJv7/7+PYasuWLWX27Nmlqamp1NfXl5NPPrk89thjVcd95plnynvf+96yzz77lIaGhvLBD36wKqiyeKV1WL169TbrXUops2bNKqNGjSqbN2/e5ph33nlnOeqoo8o+++xT9t5773LkkUeWBQsWbHdsBt1d4yeffLK89a1vLUOHDi319fXl9a9/fTn//POrfs9PKaU88cQT5bTTTiuDBg0qw4YNK5/61KeqLtWcRXfX90c/+tF2n1MioqxevbqUkvscvuaaa8oBBxxQBgwYUI4//vhy3333VfaddNJJZerUqVXjv/GNb5R/+Id/KAMGDChvfOMby+233161f0eejzPpzvoeeOCB2z1PL7roolJKKc8++2w55ZRTyv7771/69+9fDjzwwHLOOef06ouaXUF31vi8886rjG1qairveMc7ygMPPFB1POdwte4+R/z6178uEVG+//3vb3Ms53C1l/r+tHVNp06dWk466aRt7nPUUUeVAQMGlIMPPrjq9fBWL/d31hvqStmDr50KAADw/6X8zA8AAJCP+AEAAFIQPwAAQAriBwAASEH8AAAAKYgfAAAgBfEDAACkIH4AAIAUxA8AAJCC+AEAAFIQPwAAQAr/D7Thje07YFJcAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1000x1000 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 生成均匀分布的随机数\n",
    "x2 = np.random.uniform(-1, 1, 1000)\n",
    "\n",
    "# 画图看分布状况\n",
    "# 1）创建画布\n",
    "plt.figure(figsize=(10, 10), dpi=100)\n",
    "\n",
    "# 2）绘制直方图\n",
    "plt.hist(x=x2, bins=10)  # x代表要使用的数据，bins表示要划分区间数\n",
    "\n",
    "# 3）显示图像\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5e55bb336394053e",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "# 2 数组的索引、切片\n",
    "- 一维、二维、三维的数组如何索引？\n",
    "    - 直接进行索引,切片\n",
    "    - 对象[:, :] -- 先行后列\n",
    "- 二维数组索引方式：\n",
    "    - 举例：获取第一个股票的前3个交易日的涨跌幅数据\n",
    "        ```python\n",
    "        # 二维的数组，两个维度 \n",
    "        stock_change[0, 0:3]\n",
    "        ```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "id": "94ba5625c11c8f3f",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:14.469744200Z",
     "start_time": "2024-02-20T10:39:14.466175500Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.19400057, -0.51777385,  0.49419772,  0.77540376, -0.5110981 ],\n",
       "       [-1.15176941, -0.78406835,  0.2510081 , -0.92887099, -1.23303945],\n",
       "       [-0.88884262, -0.98714601,  0.87711623, -1.26290355,  0.61686271],\n",
       "       [-0.5849906 ,  1.1145051 , -0.95432897, -2.16089977,  1.42993962]])"
      ]
     },
     "execution_count": 171,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_change"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "id": "b6aaadae72603f17",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:14.477218900Z",
     "start_time": "2024-02-20T10:39:14.469744200Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.19400057, -0.51777385,  0.49419772])"
      ]
     },
     "execution_count": 172,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 二维的数组，两个维度 \n",
    "stock_change[0, 0:3]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d56253d87baa3851",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "- 三维数组索引方式："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "id": "b29dbe171123cbe7",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:14.561437800Z",
     "start_time": "2024-02-20T10:39:14.478219100Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 1,  2,  3],\n",
       "        [ 4,  5,  6]],\n",
       "\n",
       "       [[12,  3, 34],\n",
       "        [ 5,  6,  7]]])"
      ]
     },
     "execution_count": 173,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 三维\n",
    "a1 = np.array([ [[1,2,3],[4,5,6]], [[12,3,34],[5,6,7]]])\n",
    "a1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "id": "f4d82a71b77bab4",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:14.562437400Z",
     "start_time": "2024-02-20T10:39:14.484904Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 174,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a1[0, 0, 1] "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "694a023a767d56d7",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "# 3 形状修改\n",
    "## 3.1 ndarray.reshape()\n",
    "ndarray.reshape(shape, order)\n",
    "- 返回一个具有相同数据域，但shape不一样的视图\n",
    "- 行、列不进行互换"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "id": "eb2bc8de8be2f751",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:14.563809300Z",
     "start_time": "2024-02-20T10:39:14.492339900Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.19400057, -0.51777385,  0.49419772,  0.77540376, -0.5110981 ],\n",
       "       [-1.15176941, -0.78406835,  0.2510081 , -0.92887099, -1.23303945],\n",
       "       [-0.88884262, -0.98714601,  0.87711623, -1.26290355,  0.61686271],\n",
       "       [-0.5849906 ,  1.1145051 , -0.95432897, -2.16089977,  1.42993962]])"
      ]
     },
     "execution_count": 175,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_change"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 176,
   "id": "1e41c91ec1fc077",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:14.607320300Z",
     "start_time": "2024-02-20T10:39:14.500101400Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.19400057, -0.51777385,  0.49419772,  0.77540376],\n",
       "       [-0.5110981 , -1.15176941, -0.78406835,  0.2510081 ],\n",
       "       [-0.92887099, -1.23303945, -0.88884262, -0.98714601],\n",
       "       [ 0.87711623, -1.26290355,  0.61686271, -0.5849906 ],\n",
       "       [ 1.1145051 , -0.95432897, -2.16089977,  1.42993962]])"
      ]
     },
     "execution_count": 176,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 在转换形状的时候，一定要注意数组的元素匹配\n",
    "stock_change.reshape([5, 4])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 177,
   "id": "3b4f37b738f97d74",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:14.608321700Z",
     "start_time": "2024-02-20T10:39:14.506807Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.19400057, -0.51777385,  0.49419772,  0.77540376, -0.5110981 ,\n",
       "        -1.15176941, -0.78406835,  0.2510081 , -0.92887099, -1.23303945],\n",
       "       [-0.88884262, -0.98714601,  0.87711623, -1.26290355,  0.61686271,\n",
       "        -0.5849906 ,  1.1145051 , -0.95432897, -2.16089977,  1.42993962]])"
      ]
     },
     "execution_count": 177,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_change.reshape([-1,10])  # 数组的形状被修改为: (2, 10), -1: 表示通过待计算"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f0ad6aa093391e97",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 3.2 ndarray.resize()\n",
    "ndarray.resize(new_shape)\n",
    "- 修改数组本身的形状（需要保持元素个数前后相同）\n",
    "- 行、列不进行互换"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 178,
   "id": "36e079c44b27423b",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:14.609321500Z",
     "start_time": "2024-02-20T10:39:14.513906900Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.19400057, -0.51777385,  0.49419772,  0.77540376, -0.5110981 ],\n",
       "       [-1.15176941, -0.78406835,  0.2510081 , -0.92887099, -1.23303945],\n",
       "       [-0.88884262, -0.98714601,  0.87711623, -1.26290355,  0.61686271],\n",
       "       [-0.5849906 ,  1.1145051 , -0.95432897, -2.16089977,  1.42993962]])"
      ]
     },
     "execution_count": 178,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_change"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "id": "f4a82716ce83e880",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:14.610319800Z",
     "start_time": "2024-02-20T10:39:14.520296700Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(5, 4)"
      ]
     },
     "execution_count": 179,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_change.resize([5, 4])\n",
    "# 查看修改后结果\n",
    "stock_change.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 180,
   "id": "be767bd56c3a763b",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:14.611355500Z",
     "start_time": "2024-02-20T10:39:14.526153200Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.19400057, -0.51777385,  0.49419772,  0.77540376],\n",
       "       [-0.5110981 , -1.15176941, -0.78406835,  0.2510081 ],\n",
       "       [-0.92887099, -1.23303945, -0.88884262, -0.98714601],\n",
       "       [ 0.87711623, -1.26290355,  0.61686271, -0.5849906 ],\n",
       "       [ 1.1145051 , -0.95432897, -2.16089977,  1.42993962]])"
      ]
     },
     "execution_count": 180,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_change"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9f5458bb252ee6b1",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 3.3 ndarray.T\n",
    "- 数组的转置\n",
    "- 将数组的行、列进行互换"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 181,
   "id": "f49ad8f54b3abca5",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:14.612320200Z",
     "start_time": "2024-02-20T10:39:14.532925800Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4, 5)"
      ]
     },
     "execution_count": 181,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_change.T.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 182,
   "id": "5daab4c5377c4dba",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:14.623322Z",
     "start_time": "2024-02-20T10:39:14.539266700Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.19400057, -0.51777385,  0.49419772,  0.77540376],\n",
       "       [-0.5110981 , -1.15176941, -0.78406835,  0.2510081 ],\n",
       "       [-0.92887099, -1.23303945, -0.88884262, -0.98714601],\n",
       "       [ 0.87711623, -1.26290355,  0.61686271, -0.5849906 ],\n",
       "       [ 1.1145051 , -0.95432897, -2.16089977,  1.42993962]])"
      ]
     },
     "execution_count": 182,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_change"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b9e104d213547e3",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "# 4 类型修改\n",
    "## 4.1 ndarray.astype()\n",
    "- 返回修改了类型之后的数组"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 183,
   "id": "e5c5986faeed7e5b",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:14.624322Z",
     "start_time": "2024-02-20T10:39:14.547347100Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  0,  0,  0],\n",
       "       [ 0, -1,  0,  0],\n",
       "       [ 0, -1,  0,  0],\n",
       "       [ 0, -1,  0,  0],\n",
       "       [ 1,  0, -2,  1]])"
      ]
     },
     "execution_count": 183,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_change.astype(np.int32)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d53750c33de24161",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 4.2 ndarray.tobytes() \n",
    "- 构造包含数组中原始数据字节的Python字节"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 184,
   "id": "963d8a02ad8fd7d7",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:14.625354Z",
     "start_time": "2024-02-20T10:39:14.552723600Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "b'\\x01\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x03\\x00\\x00\\x00\\x04\\x00\\x00\\x00\\x05\\x00\\x00\\x00\\x06\\x00\\x00\\x00\\x0c\\x00\\x00\\x00\\x03\\x00\\x00\\x00\"\\x00\\x00\\x00\\x05\\x00\\x00\\x00\\x06\\x00\\x00\\x00\\x07\\x00\\x00\\x00'"
      ]
     },
     "execution_count": 184,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr = np.array([[[1, 2, 3], [4, 5, 6]], [[12, 3, 34], [5, 6, 7]]])\n",
    "arr.tobytes()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f540ca9093c847df",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "# 5 数组的去重\n",
    "通过np.unique()可以实现数组去重的目的"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 185,
   "id": "c3d40326b0b8b702",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-20T10:39:14.664355900Z",
     "start_time": "2024-02-20T10:39:14.559437500Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 3, 4, 5, 6])"
      ]
     },
     "execution_count": 185,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "temp = np.array([[1, 2, 3, 4],[3, 4, 5, 6]])\n",
    "np.unique(temp)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e0af7e016ce55689",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "# 6 小结\n",
    "- 创建数组【掌握】\n",
    "    - 生成0和1的数组\n",
    "        - np.ones()\n",
    "        - np.ones_like()\n",
    "    - 从现有数组中生成\n",
    "        - np.array -- 深拷贝\n",
    "        - np.asarray -- 浅拷贝\n",
    "    - 生成固定范围数组\n",
    "        - np.linspace()\n",
    "        - np.arange()\n",
    "        - np.logspace()\n",
    "    - 生层随机数组\n",
    "        - 正态分布-- 里面需要关注的参数:均值:u, 标准差:σ\n",
    "            - np.random.randn()\n",
    "            - np.random.normal(0, 1, 100)\n",
    "        - 均匀分布\n",
    "            - np.random.rand()\n",
    "            - np.random.uniform(0, 1, 100)\n",
    "            - np.random.randint(0, 10, 10)\n",
    "- 数组索引【知道】\n",
    "    - 直接进行索引,切片\n",
    "    - 对象[:, :] -- 先行后列\n",
    "- 数组形状改变【掌握】\n",
    "    - 对象.reshape()\n",
    "        - 没有进行行列互换,新产生一个ndarray\n",
    "    - 对象.resize()\n",
    "        - 没有进行行列互换,修改原来的ndarray\n",
    "    - 对象.T\n",
    "        - 进行了行列互换\n",
    "- 数组去重【知道】\n",
    "    - np.unique(对象)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
